# 采用AI生成当前训练模型
import numpy as np
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, classification_report ,confusion_matrix
import pickle

# 从txt文件加载数据
# 假设数据格式：每行包含多个特征值，最后一个值为标签
data = np.loadtxt('data.txt')

# 分割特征和标签
X = data[:, :-1]  # 所有行，除了最后一列（特征）
y = data[:, -1]   # 所有行的最后一列（标签）

# 将数据分为训练集和测试集
# 测试集占20%，使用分层抽样保持类别分布，设置随机种子确保结果可复现
X_train, X_test, y_train, y_test = train_test_split(
    X, y,
    test_size=0.2,
    random_state=42,
    shuffle=True,
    stratify=y
)

# 初始化随机森林分类器
# 可以根据需要调整参数，如n_estimators（树的数量）、max_depth（树的最大深度）等
# rf_classifier = RandomForestClassifier(
#     n_estimators=100,  # 树的数量
#     max_depth=None,    # 树的最大深度，None表示不限制
#     random_state=42    # 随机种子，确保结果可复现
# )
rf_classifier = RandomForestClassifier()

# 在训练集上训练模型
rf_classifier.fit(X_train, y_train)

# 在测试集上进行预测
y_pred = rf_classifier.predict(X_test)

# 评估模型性能
accuracy = accuracy_score(y_test, y_pred)
print(f"模型准确率: {accuracy:.4f} ({accuracy*100:.2f}%)")
print("\n分类报告:")
print(classification_report(y_test, y_pred))
print(confusion_matrix(y_test,y_pred))
# 保存训练好的模型到文件，方便后续使用
with open('model', 'wb') as f:
    pickle.dump(rf_classifier, f)
print("\n模型已保存为 'rf_model.pkl'")